home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / utility / 329 / xmain.c < prev    next >
Encoding:
C/C++ Source or Header  |  1988-10-18  |  23.4 KB  |  779 lines

  1.  
  2. /***************************************************************************
  3.  
  4.     XMAIN.C
  5.  
  6.     - main routine, GEM routines, etc.
  7.  
  8.     01/23/88 created
  9.     03/03/88 Laser C
  10.  
  11.     07/27/88 08:30
  12.  
  13. ***************************************************************************/
  14.  
  15. #include <stdio.h>
  16. #include <osbind.h>
  17. #include <obdefs.h>
  18. #include <gemdefs.h>
  19. #include <strings.h>
  20. #include "x4merII2.h"
  21. #include "xglobal.h"
  22. #include "xatari.h"
  23.  
  24.  
  25. int appl_id ;       /* our application ID */
  26. int phys_handle;    /* physical workstation handle */
  27. int handle;         /* virtual workstation handle */
  28. int xdesk,ydesk,hdesk,wdesk;
  29.  
  30. int contrl[12];
  31. int intin[128];
  32. int ptsin[128];
  33. int intout[128];
  34. int ptsout[128];
  35. int work_in[11];
  36. int work_out[57];
  37.  
  38. int fHidden;
  39. int dummy;
  40.  
  41. OBJECT *objMainMenu, *objMenuBar, *objLoRez, *objSendCash, *objConfAtari;
  42. OBJECT *objShare1, *objShare2, *objKey, *objMon, *objAtari, *objApple;
  43. OBJECT *objOther, *objCredits, *objHelp0, *objUnispec, *objCricit;
  44. OBJECT *objMegamax, *objWordPerf;
  45.  
  46. /****************************************************************/
  47.  
  48. long lEmul;     /* == arEmul */
  49. long lRStat;    /* == arRSTAT */
  50. long lWStat;    /* == arWSTAT */
  51. long lMemory;   /* start of 6502 memory */ 
  52.  
  53. /* these variables are not directly used by the interpreter */
  54. int  fIsMono;
  55. long lScr, lScrGEM;
  56. long lFreeSpace;    /* used by individual machines */
  57. long lScratch;      /* a 32K buffer for misc. uses */
  58.  
  59. /* pointers to the 2 system fonts */
  60. long lFont8, lFont16;
  61.  
  62. /* these guys keep track of the machine and ROM type */
  63. int mdMachine = FILEGENE;
  64.  
  65. /* anytime ROM is changed, must reboot */
  66. int fReboot = TRUE;
  67.  
  68. int rgwPalette[16] =
  69.     {
  70.     0x777, 0x622, 0x476, 0x200
  71.     };
  72.  
  73. int rgwPaletteSav[16];
  74.  
  75. char szAppleROM[] = "AP*.STX";
  76. char szC64ROM[] = "C64*.STX";
  77.  
  78. char *rgszNames[5] =
  79.     {
  80.     "    Generic 6502      ",
  81.     "    Atari 400/800     ",
  82.     "    Atari 800XL/65XE  ",
  83.     "    Apple II 48K      ",
  84.     "    Commodore 64      "
  85.     };
  86.  
  87. /****************************************************************/
  88.  
  89. main()
  90.     {
  91.     int i;
  92.     long lHeap;
  93.  
  94.     appl_id = appl_init();
  95.     phys_handle=graf_handle(&dummy,&dummy,&dummy,&dummy);
  96.     wind_get(0, WF_WORKXYWH, &xdesk, &ydesk, &wdesk, &hdesk);
  97.  
  98.     for(i=0;i<10;work_in[i++]=1);
  99.     work_in[10]=2;
  100.     handle=phys_handle;
  101.     v_opnvwk(work_in,&handle,work_out);
  102.     graf_mouse(ARROW,0x0L);
  103.  
  104. #ifdef NEVER
  105.     if (rsrc_load("x4merII2.rsc")==0)
  106.         {
  107.         form_alert(1,"[1][ _X4MERII2.RSC |  not found! ][ tsk-tsk ]");
  108.         goto lQuit2;
  109.         }
  110. #else
  111.     fix_tree();
  112. #endif
  113.     rsrc_gaddr(0, MAINMENU, &objMainMenu);
  114.     rsrc_gaddr(0, MENUBAR, &objMenuBar);
  115.     rsrc_gaddr(0, SENDCASH, &objShare1);
  116.     rsrc_gaddr(0, SENDCAS2, &objShare2);
  117.     rsrc_gaddr(0, HELP0, &objHelp0);
  118.     rsrc_gaddr(0, KEYBOARD, &objKey);
  119.     rsrc_gaddr(0, MONITOR, &objMon);
  120.     rsrc_gaddr(0, HLPATARI, &objAtari);
  121.     rsrc_gaddr(0, HLPAPPLE, &objApple);
  122.     rsrc_gaddr(0, HLPOTHER, &objOther);
  123.     rsrc_gaddr(0, CONFATAR, &objConfAtari);
  124.     rsrc_gaddr(0, CREDITS, &objCredits);
  125.     rsrc_gaddr(0, UNISPEC, &objUnispec);
  126.     rsrc_gaddr(0, CRICIT, &objCricit);
  127.     rsrc_gaddr(0, TMEGAMAX, &objMegamax);
  128.     rsrc_gaddr(0, WPAD, &objWordPerf);
  129.  
  130. /*    objMenuBar[FILEAPPL].ob_state |= DISABLED; */
  131. /*    objMenuBar[FILEC64].ob_state |= DISABLED; */
  132.  
  133.     Blit (" -- off -- ", ((TEDINFO *)objConfAtari[ATARIDR1].ob_spec)->te_ptext + 5);
  134.     Blit (" -- off -- ", ((TEDINFO *)objConfAtari[ATARIDR2].ob_spec)->te_ptext + 5);
  135.  
  136.     for (i=0; i<16; i++)
  137.         rgwPaletteSav[i] = Setcolor(i, -1);
  138.     Setpalette(rgwPalette);
  139.  
  140.     if (((lHeap = Malloc(630L*1024L)) == -1L) || (lHeap == 0L))
  141.         {
  142.         if (((lHeap = Malloc(540L*1024L)) == -1L) || (lHeap == 0L))
  143.             {
  144.             form_alert(1,"[1][ insufficient memory! ][ bye-bye! ]");
  145.             goto lQuit2;
  146.             }
  147.         fDDenable = FALSE;
  148.         }
  149.     else
  150.         {
  151.         fDDenable = TRUE;
  152.         }
  153.  
  154.     if (Getrez() == 0)
  155.         {
  156.         form_alert(1,"[1][ Please switch to |   medium rez.   ][ OK ]");
  157.         goto lQuit2;
  158.         }
  159.  
  160.     /* we have a heap, initialize it */
  161.     lMemory = ((lHeap + 65535L) & 0xFFFF0000L);
  162.     lRStat = lMemory + 65536L + 32768L;
  163.     lWStat = lRStat + 32768L;
  164.     lEmul = lWStat + 65536L;
  165.     lFreeSpace = lEmul + 32768L;
  166.  
  167.     /* always make sure that lScr is last in case graphics overflow */
  168.     if (lMemory - lHeap > 32767L)
  169.         {
  170.         lScratch = lMemory - 32768L;
  171.         lScr = lFreeSpace + 184320L + (fDDenable ? 92160L : 0);
  172.         }
  173.     else
  174.         {
  175.         lScratch = lFreeSpace + 184320L + (fDDenable ? 92160L : 0);
  176.         lScr = lScratch + 32768L;
  177.         }
  178.  
  179.     fIsMono = ((Getrez == 2) ? ~0 : 0);
  180.     lScrGEM = Physbase();
  181.  
  182.     /* initialize text plotting routines to bypass GEM */
  183. asm {
  184.     dc.w    0xA000      ; returns A1 = pointer to array of font headers
  185.     move.l  4(A1),A0    ; pointer to 8x8 font
  186.     move.l  76(A0),lFont8
  187.     move.l  8(A1),A0    ; pointer to 8x16 font
  188.     move.l  76(A0),lFont16
  189.     }
  190.  
  191.     init_heap();
  192.     init_atari();
  193.  
  194. #ifdef NDEBUG
  195.     printf("\033EHeap locations:  lHeap: $%5lx\n",lHeap);
  196.     printf("(Dispatcher) lEmul: $%5lx   ",lEmul);
  197.     printf("(6502 main memory) lMemory: $%5lx\n", lMemory);
  198.     printf("lRStat: $%5lx   lWStat: $%5lx\n",lRStat, lWStat);
  199.     printf("(display screen) lScr: $%5lx\n",lScr);
  200.     printf("(Free Space: $%5lx   ",lFreeSpace);
  201.     printf("Desktop screen: $%5lx  ",lScrGEM);
  202.     printf("fMono: %d\n",fIsMono);
  203. #endif
  204.  
  205. #ifdef NDEBUG
  206.     printf("\033H\n\nlEmul = $%5lx   lMemory = $%5lx   ", lEmul, lMemory);
  207.     printf("lRStat = $%5lx   lWStat = $%5lx\n",
  208.          lRStat, lWStat);
  209.     printf("&lEmul = $%5lx   &lMemory = $%5lx", &lEmul, &lMemory);
  210.     printf("&lRStat = $%5lx   &lWStat = $%5lx\n",
  211.          &lRStat, &lWStat);
  212. #endif
  213.  
  214.     /* everything OK, show menu bar and title */
  215.     menu_bar (objMenuBar, TRUE);
  216.     do_dialog(objMainMenu, TRUE);
  217.     do_dialog(objShare2, TRUE);
  218.  
  219.     /* go do something */
  220.     multi();
  221.  
  222.     menu_bar (objMenuBar, FALSE);
  223.  
  224. lQuit:
  225.     Mfree(lHeap);
  226. lQuit2:
  227.     v_clsvwk(handle);
  228.     appl_exit();
  229.     Setpalette(rgwPaletteSav);
  230.     exit(0);
  231.     }
  232.  
  233.  
  234. hide_mouse()
  235.     {
  236.     if(!fHidden)
  237.         {
  238.         graf_mouse(M_OFF,0x0L);
  239.         fHidden=TRUE;
  240.         }
  241.     }
  242.  
  243. show_mouse()
  244.     {
  245.     if(fHidden)
  246.         {
  247.         graf_mouse(M_ON,0x0L);
  248.         fHidden=FALSE;
  249.         }
  250.     }
  251.  
  252. do_dialog(dialog, fDo)
  253. OBJECT *dialog;
  254. int fDo;
  255.     {
  256.     int but=0;
  257.     int cx, cy, cw, ch, xc, yc;
  258.  
  259.     while (Bconstat(2))
  260.         Bconin(2);
  261.  
  262.     /* center the dialog box */
  263.     form_center(dialog, &cx, &cy, &cw, &ch);
  264.  
  265.     xc = cx + cw/2 ;
  266.     yc = cy + ch/2 ;
  267.  
  268. #ifndef NEVER
  269.     if (fDo)
  270.         {
  271.         form_dial(FMD_START, 0,0,0,0, xdesk, ydesk, wdesk, hdesk);
  272.         form_dial(FMD_GROW, xc,yc,0,0, cx, cy, cw, ch);
  273.         }
  274. #endif
  275.     
  276.     objc_draw(dialog, 0, 10, cx, cy, cw, ch);
  277.  
  278.     if (!fDo)
  279.         return 0;
  280.  
  281.     but=form_do(dialog,0);
  282.     dialog[but].ob_state &= ~SELECTED;
  283.  
  284. #ifndef NEVER
  285.     form_dial(FMD_SHRINK, xc,yc,0,0, cx, cy, cw, ch);
  286.     form_dial(FMD_FINISH, 0,0,0,0, xdesk, ydesk, wdesk, hdesk);
  287. #endif
  288.  
  289.     return(but);
  290.     }
  291.  
  292.  
  293. multi()
  294.     {
  295.     int wEvent, fQuit=FALSE, h;
  296.     int rgwMsgBuff[16];
  297.     do
  298.         {
  299.         evnt_mesag(rgwMsgBuff);
  300.  
  301.         wEvent = rgwMsgBuff[0];
  302.  
  303.         if (wEvent == WM_REDRAW)
  304.             {
  305.             continue;
  306.             }
  307.         else if (wEvent != MN_SELECTED)
  308.             {
  309.             Assert(FALSE,"xmain.c: unknown event");
  310.             continue;
  311.             }
  312.  
  313.         switch(rgwMsgBuff[3])
  314.             {
  315.             default:
  316.                 Assert(FALSE,"unknown menu entry!!!!!!!!!");
  317.                 break;
  318.  
  319.             case DESK:
  320.                 do_dialog(objMainMenu, TRUE);
  321.                 break;
  322.  
  323.             case FILE:
  324.                 {
  325.                 int md;
  326.  
  327.                 switch (md=rgwMsgBuff[4])
  328.                     {
  329.                     default:
  330.                         break;
  331.                         
  332.                     case FILECOLD:
  333. Lnogo:
  334.                         if (mdMachine == FILEGENE)
  335.                             {
  336.                             form_alert(1,
  337.                       "[0][ Use 6502 Monitor | for Generic mode ][ OK ]");
  338.                             break;
  339.                             }
  340.                         hide_mouse();
  341.                         if (mdMachine == FILEATAR)
  342.                             setup_atari();
  343.                         else if (mdMachine == FILEAPPL)
  344.                             setup_apple();
  345.                         ColdStart();
  346.                         show_mouse();
  347.                         break;
  348.                         
  349.                     case FILECONT:
  350.                         if (mdMachine == FILEGENE)
  351.                             goto Lnogo;
  352.                         hide_mouse();
  353.                         Continue();
  354.                         show_mouse();
  355.                         break;
  356.                         
  357.                     case FILEGENE:
  358.                         if (mdMachine != FILEGENE)
  359.                             {
  360.                             fReboot = TRUE;
  361.                             objMenuBar[mdMachine].ob_state &= ~CHECKED;
  362.                             objMenuBar[mdMachine=md].ob_state |= CHECKED;
  363.                             set_menu(0);
  364.                             }
  365.                         break;
  366.                         
  367.                     case FILEATAR:
  368.                         {
  369.                         if (mdMachine != FILEATAR)
  370.                             {
  371.                             objMenuBar[mdMachine].ob_state &= ~CHECKED;
  372.                             objMenuBar[mdMachine=md].ob_state |= CHECKED;
  373.                             fReboot = TRUE;
  374.                             }
  375.                         else
  376.                             fReboot = FALSE;
  377.  
  378.                     /* if person pressed Reconfigure, or this is the
  379.                     ** first time in the config box, force a reboot */
  380.  
  381.                         fReboot = conf_atari() || fReboot;
  382.  
  383.                         fFastIO =
  384.                               objConfAtari[CONFFAST].ob_state & SELECTED;
  385.                         rgAD[0].fWP =
  386.                               objConfAtari[CONFWP1].ob_state & SELECTED;
  387.                         rgAD[1].fWP =
  388.                               objConfAtari[CONFWP2].ob_state & SELECTED;
  389.  
  390.                         if (!fReboot)
  391.                             {
  392.                             set_menu(fAtariXL ? 2 : 1);
  393.                             break;
  394.                             }
  395.  
  396.                         fAtCart =
  397.                               objConfAtari[CONFCART].ob_state & SELECTED;
  398.                         fFastFP =
  399.                               objConfAtari[CONFFP].ob_state & SELECTED;
  400.                         fAtariXLROMs =
  401.                               objConfAtari[CONFXLXE].ob_state & SELECTED;
  402.                         fAtariXL =
  403.                               objConfAtari[CONFMEM3].ob_state & SELECTED |
  404.                               objConfAtari[CONFMEM4].ob_state & SELECTED;
  405.                         wVBIrate = 1 +
  406.                           ((objConfAtari[ATARVBI2].ob_state & SELECTED) ? 1 : 0) +
  407.                           ((objConfAtari[ATARVBI3].ob_state & SELECTED) ? 1 : 0);
  408.  
  409.                         if ( objConfAtari[CONFMEM0].ob_state & SELECTED )
  410.                             uAtRAM = 32768;
  411.                         else if ( objConfAtari[CONFMEM1].ob_state & SELECTED )
  412.                             uAtRAM = 40960;
  413.                         else
  414.                             uAtRAM = 49152;
  415.  
  416.                         set_menu(fAtariXL ? 2 : 1);
  417.                         setup_atari();
  418.                         }
  419.                         break;
  420.  
  421.                     case FILEAPPL:
  422.                         if (mdMachine != FILEAPPL)
  423.                             {
  424.                             int h;
  425.  
  426.                             if ((h = Fopen (szAppleROM,0))<0)
  427.                                 {
  428.                                 form_alert(1,
  429.                                  "[0][ file not found! ][ See Manual ]");
  430.                                 break;
  431.                                 }
  432.                             if (Fread(h,12288L, lScratch)<0)
  433.                                 {
  434.                                 form_alert(1,
  435.                                  "[0][ error reading file ][ See Manual ]");
  436.                                 break;
  437.                                 }
  438.                             Fclose (h);
  439.  
  440.                             fReboot = TRUE;
  441.                             objMenuBar[mdMachine].ob_state &= ~CHECKED;
  442.                             objMenuBar[mdMachine=md].ob_state |= CHECKED;
  443.                             set_menu(3);
  444.  
  445.                             setup_apple();
  446.                             }
  447.                         break;
  448.                         
  449.                     case FILEC64:
  450.                         if (mdMachine != FILEC64)
  451.                             {
  452.                             int h;
  453.  
  454.                             if ((h = Fopen (szC64ROM,0))<0)
  455.                                 {
  456.                                 form_alert(1,
  457.                                  "[0][ file not found! ][ See Manual ]");
  458.                                 break;
  459.                                 }
  460.                             if (Fread(h,16384L, lScratch)<0)
  461.                                 {
  462.                                 form_alert(1,
  463.                                  "[0][ error reading file ][ See Manual ]");
  464.                                 break;
  465.                                 }
  466.                             Fclose (h);
  467.  
  468.                             fReboot = TRUE;
  469.                             objMenuBar[mdMachine].ob_state &= ~CHECKED;
  470.                             objMenuBar[mdMachine=md].ob_state |= CHECKED;
  471.                             set_menu(4);
  472.  
  473.                             setup_c64();
  474.                             }
  475.                         break;
  476.  
  477.                     case FILESAVE:
  478.                         {
  479.                         int h, i=0;
  480.                         char *szSavePic = "x4mer000.pi1";
  481.  
  482.                         if (fIsMono)
  483.                             {
  484.                             szSavePic[11] = '3';
  485.                             i = 2;
  486.                             }
  487.  
  488.                         h = Fcreate(szSavePic, 0);
  489.                         if (h>=0)
  490.                             {
  491.                             Fwrite(h, 2L, &i);
  492.                             Fwrite(h, 32L, rgwAtColors);
  493.                             Fwrite(h, 32000L, lScr+3840L);
  494.                             Fclose(h);
  495.  
  496.                             /* increment filename */
  497.                             if (++szSavePic[7] > '9')
  498.                                 {
  499.                                 szSavePic[7] = '0';
  500.                                 if (++szSavePic[6] > '9')
  501.                                     {
  502.                                     szSavePic[6] = '0';
  503.                                     if (++szSavePic[5] > '9')
  504.                                         {
  505.                                         szSavePic[5] = '0';
  506.                                         }
  507.                                     }
  508.                                 }
  509.                             }
  510.                         }
  511.                         break;
  512.                     
  513.                     case FILE6502:
  514.                         hide_mouse();
  515.                         menu_tnormal(objMenuBar,rgwMsgBuff[3],1) ;
  516.                         mon();
  517.                         redraw_desktop(TRUE);
  518.                         show_mouse();
  519.                         break;
  520.                     case FILEQUIT:
  521.                         fQuit = TRUE;
  522.                         break;
  523.                     }
  524.                 break;
  525.             case HELP:
  526.                 switch (rgwMsgBuff[4])
  527.                     {
  528.                     default:
  529.                         Assert(FALSE,"unknown HELP selection");
  530.                         break;
  531.                     case HELPSTAR:
  532.                         do_dialog(objHelp0, TRUE);
  533.                         break;
  534.                     case HELPDOCS:
  535.                         do_dialog(objShare1, TRUE);
  536.                         do_dialog(objShare2, TRUE);
  537.                         break;
  538.                     case HELPKEYS:
  539.                         do_dialog(objKey, TRUE);
  540.                         break;
  541.                     case HELPMON:
  542.                         do_dialog(objMon, TRUE);
  543.                         break;
  544.                     case HELPATAR:
  545.                         do_dialog(objAtari, TRUE);
  546.                         break;
  547.                     case HELPAPPL:
  548.                         do_dialog(objApple, TRUE);
  549.                         break;
  550.                     case HELPOTHR:
  551.                         do_dialog(objOther, TRUE);
  552.                         break;
  553.                     case HELPKISS:
  554.                         h = do_dialog(objCredits, TRUE);
  555.                         if (h == HELPTRIO)
  556.                             {
  557.                             if (fIsMono)
  558.                                 do_dialog(objUnispec, TRUE);
  559.                             else
  560.                                 {
  561.                                 hide_mouse();
  562.                                 do_dialog(objUnispec, FALSE);
  563.                                 delay(3000);
  564.                                 uni_demo_on();
  565.                                 Bconin(2);
  566.                                 uni_demo_off();
  567.                                 show_mouse();
  568.                                 redraw_desktop(FALSE);
  569.                                 }
  570.                             }
  571.                         else if (h == HELPQMI)
  572.                             {
  573.                             qmi_demo(lScratch, handle);
  574.                             redraw_desktop(TRUE);
  575.                             }
  576.                         else if (h == HELPCRIC)
  577.                             {
  578.                             do_dialog(objCricit, TRUE);
  579.                             }
  580.                         else if (h == HELPWORD)
  581.                             {
  582.                             do_dialog(objWordPerf, TRUE);
  583.                             }
  584.                         else
  585.                             {
  586.                             do_dialog(objMegamax, TRUE);
  587.                             }
  588.                         break;
  589.                     }
  590.                 break;
  591.                 }
  592.             }
  593.              
  594.         menu_tnormal(objMenuBar,rgwMsgBuff[3],1) ;
  595.         } while(!fQuit);
  596.     }
  597.  
  598. /* returns TRUE if Reconfigure was pressed */
  599. int conf_atari()
  600.     {
  601.     int but, wAlert, wExit;
  602.     char szPath[80], szName[15];            
  603.     register char *pch;
  604.  
  605.     static char *rgszDens[4] =
  606.         {
  607.         "---",
  608.         "SNG",
  609.         "ENH",
  610.         "DBL"
  611.         };
  612.            
  613.     do
  614.         {
  615.         but = do_dialog(objConfAtari, TRUE);
  616.  
  617.         if (but == ATARLOAD)
  618.             {
  619.             wAlert = form_alert(1,
  620.                   "[0][    Load which drive?     ][D1:|D2:|Cancel]");
  621.             if (--wAlert < 2)
  622.                 {
  623.                 Blit (rgAD[wAlert].rgchPath, szPath);
  624.                 if (szPath[strlen(szPath)-1] == '\\')
  625.                     strcat(szPath, fDDenable ? "*.?D" : "*.SD");
  626.                 else
  627.                     strcat(szPath, fDDenable ? "\\*.?D" : "\\*.SD");
  628.                 szName[0] = 0;
  629.  
  630.                 while (fsel_input(szPath, szName, &wExit) == 0)
  631.                     ;
  632.  
  633.                 if (wExit != 1)
  634.                     {
  635.                     rgAD[wAlert].mdDensity = 0;
  636.                     continue;
  637.                     }
  638.  
  639.                 Blit (szPath, rgAD[wAlert].rgchPath);
  640.                 Blit (szName, rgAD[wAlert].rgchName);
  641.                 atari_load(wAlert);
  642.                 }     
  643.             }
  644.         else if (but == ATARSAVE)
  645.             {
  646.             wAlert = form_alert(1,
  647.                   "[0][    Save which drive?     ][D1:|D2:|Cancel]");
  648.             if (--wAlert < 2)
  649.                 {
  650.                 Blit (rgAD[wAlert].rgchPath, szPath);
  651.                 if (szPath[strlen(szPath)-1] == '\\')
  652.                     strcat(szPath, fDDenable ? "*.?D" : "*.SD");
  653.                 else
  654.                     strcat(szPath, fDDenable ? "\\*.?D" : "\\*.SD");
  655.                 szName[0] = 0;
  656.  
  657.                 while (fsel_input(szPath, szName, &wExit) == 0)
  658.                     ;
  659.  
  660.                 if (wExit != 1)
  661.                     continue;
  662.                     
  663.                 Blit (szPath, rgAD[wAlert].rgchPath);
  664.                 Blit (szName, rgAD[wAlert].rgchName);
  665.                 atari_save(wAlert);
  666.                 }
  667.             }
  668.         else if (but == CONFD1)
  669.             {
  670.             hide_mouse();
  671.             atari_dir(0);
  672.             show_mouse();
  673.             redraw_desktop(TRUE);
  674.             }
  675.         else if (but == CONFD2)
  676.             {
  677.             hide_mouse();
  678.             atari_dir(1);
  679.             show_mouse();
  680.             redraw_desktop(TRUE);
  681.             }
  682.  
  683.         if (rgAD[0].mdDensity == 0)
  684.             {
  685.             Blit (" -- off -- ",
  686.                ((TEDINFO *)objConfAtari[ATARIDR1].ob_spec)->te_ptext + 5);
  687.             }
  688.         else
  689.             {
  690.             Blit (rgAD[0].rgchName,
  691.                ((TEDINFO *)objConfAtari[ATARIDR1].ob_spec)->te_ptext + 5);
  692.             }
  693.  
  694.         if (rgAD[1].mdDensity == 0)
  695.             {
  696.             Blit (" -- off -- ",
  697.                ((TEDINFO *)objConfAtari[ATARIDR2].ob_spec)->te_ptext + 5);
  698.             }
  699.         else
  700.             {
  701.             Blit (rgAD[1].rgchName,
  702.                ((TEDINFO *)objConfAtari[ATARIDR2].ob_spec)->te_ptext + 5);
  703.             }
  704.  
  705.         sprintf(((TEDINFO *)objConfAtari[ATARSTD1].ob_spec)->te_ptext + 11,
  706.                 "%3.3s  Free: %03d", rgszDens[rgAD[0].mdDensity],
  707.                 free_secs(0));
  708.         sprintf(((TEDINFO *)objConfAtari[ATARSTD2].ob_spec)->te_ptext + 11,
  709.                 "%3.3s  Free: %03d", rgszDens[rgAD[1].mdDensity],
  710.                 free_secs(1));
  711.  
  712.         } while ((but != CONFEXIT) && (but != CONFCONF));
  713.     return (but == CONFCONF);
  714.     }
  715.        
  716.  
  717. delay(cms)
  718. int cms;
  719.     {
  720.     evnt_timer(cms,0);
  721.     }
  722.  
  723. redraw_desktop(fMenu)
  724. int fMenu;
  725.     {
  726.     hide_mouse();
  727.     wind_update(TRUE);
  728.  
  729.     if (fMenu)
  730.         {
  731.         menu_bar (objMenuBar, FALSE);
  732.         menu_bar (objMenuBar, TRUE);
  733.         }
  734.  
  735.     form_dial(FMD_START, 0,0,0,0, xdesk, ydesk, wdesk, hdesk);
  736.     form_dial(FMD_FINISH, 0,0,0,0, xdesk, ydesk, wdesk, hdesk);
  737.     wind_update(FALSE);
  738.     show_mouse();
  739.     Setpalette(rgwPalette);
  740.     }
  741.  
  742. /* change the disable menu entry to a new string in rgszNames[isz] */
  743. /* and redraw menu bar */
  744. set_menu(isz)
  745. int isz;
  746.     {
  747.     menu_text(objMenuBar, MENUSTAT, rgszNames[isz]);
  748.     menu_bar (objMenuBar, FALSE);
  749.     menu_bar (objMenuBar, TRUE);
  750.     }
  751.  
  752. #ifdef DEBUG
  753.  
  754. void _alert(pch)
  755. register char *pch;
  756.     {
  757.     register int fPrinter;
  758.  
  759.     fPrinter = Cprnos();
  760.  
  761.     Cconws("\033j\033H\033p\033lAssertion failed: ");
  762.     while (*pch)
  763.         {
  764.         if (fPrinter)
  765.             Cprnout((int)*pch);
  766.         Bconout(2,(int)*pch++);
  767.         }
  768.     if (fPrinter)
  769.         {
  770.         Cprnout(13);
  771.         Cprnout(10);
  772.         }
  773.     Cconws("\033q\003l\033k\007");
  774.     Bconin(2);
  775.     }
  776.  
  777. #endif
  778.  
  779.